#include <bits/stdc++.h>
using namespace std;
#define int long long
int ans=INT_MAX,cs=INT_MAX;
int n,m,k,s,t;
vector<bool>f;
set<pair<int,int>> v[1001];
vector<pair<int,int>>dp(1001,{INT_MAX,INT_MAX});
void dfs(int z,int tx,int tmp)
{
    if(tx>cs)return ;
    if(tx==cs&&tmp>ans)return;
    if(tx<dp[z].first)
    {
        dp[z].first=tx;
        dp[z].second=tmp;
    }
    else if(tx==dp[z].first)
    {
        if(tmp<=dp[z].second)dp[z].second=tmp;
        else return ;
    }
    else 
    {
        return ;
    }
    if(z==t)
    {
        if(tx<cs)
        {
            cs=tx;
            ans=tmp;
        }
        else 
        {
            ans=min(ans,tmp);
        }
        return ;
    }
    for(auto x:v[z])
    {
        if(z==x.first)continue;
        if(f[x.first])dfs(x.first,tx+1,tmp+x.second);
        else dfs(x.first,tx,tmp+x.second);
    }
}
void solve()
{
    
    cin>>n>>m>>k>>s>>t;
    f=vector<bool>(n+1);
    for(int i=1;i<=k;i++)
    {
        int x;
        cin>>x;
        f[x]=1;
    }
    int cf=0;
    for(int i=1;i<=n;i++)
    {
        if(f[i])cf++;
    }
    for(int i=1;i<=m;i++)
    {
        int x,c,d;
        cin>>x>>c>>d;
        v[x].insert({c,d});
    }
    cs=cf;
    dfs(s,0,0);
    if(ans!=INT_MAX)
    {
        cout<<ans<<endl;
        return ;
    }
    cout<<"-1"<<endl;
}
signed main()
{
    //ios::sync_with_stdio(false);
    //cin.tie(nullptr);
    int T=1;
    //cin>>T;
    while(T--)
    {
       solve();
    }
    return 0;
}